CloudFormationで削除保護をつけたEC2の作成と削除
ご機嫌いかがでしょうか、豊崎です。
今回はCloudFormationでEC2にTermination Protection(削除保護)をつけて構築する方法と、削除する方法について書きたいと思います。
Termination Protectionとは
EC2を誤操作による削除(terminate)から守ってくれる機能です。
EC2ダッシュボードの以下赤枠から設定できます。
CloudFormationで書いてみる
Termination Protection(削除保護)の書き方は非常に簡単です。 EC2のリソースタイプのDisableApiTerminationプロパティをtrueにするだけです。
### AWSTemplateFormatVersion: 2010-09-09 Description: TEST EC2 Termination Protection Resources: MyEC2: Type: "AWS::EC2::Instance" Properties: AvailabilityZone: ap-northeast-1a DisableApiTermination: true ### ここでTerminationProtection(削除保護)を指定しています。 EbsOptimized: false ImageId: ami-859bbfe2 InstanceType: t2.micro KeyName: test-key SecurityGroupIds: - sg-XXXXXXXX SubnetId: subnet-XXXXXXXX
それではCreateStackして作成されたEC2をみてみましょう。 確かに「削除保護」がTrueになっています。
削除してみる
その前に
先ほど作成したCloudFormationStackをDeleteStackしてみたいのですが TerminationProtection(削除保護)が有効になっているのでこのままでは当然削除できません。
このように怒られます。
The instance 'i-XXXXXXXXXXXXXXXXX' may not be terminated. Modify its 'disableApiTermination' instance attribute and try again.
ではどうしたらいいのでしょうか?
エラーメッセージにもある通り、DeleteStackする前に、DisableApiTerminationプロパティのパラメータをtrueからfalseに変更してUpdateStackします。 TerminationProtection(削除保護)が無効になったことを確認して、DeleteStackを行いましょう。
UpdateStack
それでは以下テンプレートでUpdateStackをします。 DisableApiTerminationをTrueからfalseに変更しています。
### AWSTemplateFormatVersion: 2010-09-09 Description: TEST EC2 Termination Protection Resources: MyEC2: Type: "AWS::EC2::Instance" Properties: AvailabilityZone: ap-northeast-1a DisableApiTermination: false ### ここでを無効を指定しています。 EbsOptimized: false ImageId: ami-859bbfe2 InstanceType: t2.micro KeyName: test-key SecurityGroupIds: - sg-XXXXXXXX SubnetId: subnet-XXXXXXXX
この変更ではEC2の置換は発生しません。
TerminationProtection(削除保護)がfalseになりました。
DeleteStack
その後、DeleteStackを行いましょう。 無事対象のEC2が削除されました。
さいごに
TerminationProtection(削除保護)はAPIからのTerminateを無効にするオプションであることがわかりました。 保護している対象は保護を解除してからでないと削除できません。AWSマネジメントコンソールでもCloudFormationでもAWSLCIであってもそれは一緒です。 本番環境下など、削除されてはいけないEC2に対してしっかり設定を行いましょう。
参考URL
http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html